"""
存放一些工具函数
"""


from typing import Dict, List, Union
from datetime import datetime
import motor.motor_asyncio


def bean_map(doc: dict, fields: List[str]) -> Dict:
    """
    对象映射，将一部分字段映射出来
    :param doc: 所要映射的对象
    :param fields: 将哪些字段映射出来
    :return: 生成的新对象
    """
    return {k: doc[k] for k in fields}


def dt2str(dt: datetime) -> str:
    return dt.strftime('%Y-%m-%d %H:%M:%S')


AsyncIOMotorCollection = motor.motor_asyncio.AsyncIOMotorCollection


async def update_settings(coll: AsyncIOMotorCollection, settings_name: str, data: Union[dict, str]) -> None:
    """
    更新 mongo 中的配置项数据
    :param coll: 配置项数据所在的 collection
    :param settings_name: 该配置项的 name，用于在 collection 中查找到此 doc
    :param data: 更新后的数据
    :return: None
    """
    await coll.update_one({'name': settings_name}, {'$set': {'data': data}})